package com.ht.api.call.func.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.ht.api.bean.AjaxResult;
import com.ht.api.bean.LoginBean;
import com.ht.api.call.func.IFunctionCall;
import com.ht.api.db.Db;
import com.ht.api.db.Entity;
import com.ht.api.db.exception.HtException;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * 解析批量新增字典
 * @author asq
 * @createTime 2025年2月28日 10:02:18
 */
@Slf4j
public class ParseTextToJsonFunctionCall implements IFunctionCall {

	@Override
	public String getName() {
		return "解析批量新增字典";
	}

	@Override
	public JSONObject execute(LoginBean me, JSONObject param, AjaxResult result) {
		// 获取参数
		String text = param.getStr("text");
		String dictId = param.getStr("dict_id");
		if (StrUtil.isBlank(text)) {
			throw new HtException("text参数不能为空~");
		}
		if (StrUtil.isBlank(dictId)) {
			throw new HtException("dictId参数不能为空~");
		}

        // 处理表头
        String[] lines = text.split("\n");
        String[] headers = lines[0].trim().split("[\\s,，-]+");
        if (headers.length < 2 || !headers[0].equalsIgnoreCase("value") || !headers[1].equalsIgnoreCase("label")) {
            throw new HtException("表头必须包含 'value' 和 'label'");
        }

        // 定义分隔符模式
        Pattern pattern = Pattern.compile("^\\s*(.*?)\\s*[-,，\\s]+(.*?)\\s*$");
        List<Entity> list = new ArrayList<>();
        for (int i = 1; i < lines.length; i++) {
            String line = lines[i].trim();
            Entity sysDictValue = Db.createEntity("sys_dict_value").set("dict_id", dictId);

            Matcher matcher = pattern.matcher(line);

            if (matcher.matches()) {
                String value = matcher.group(1).trim();
                String label = matcher.group(2).trim();

                sysDictValue.set("dict_label", label);
                sysDictValue.set("dict_value", value);
                sysDictValue.set("order_num", i);

                list.add(sysDictValue);
            }
        }
        
        // 批量插入数据库
//        Db.insertBatchSync(list);
        Db.insertBatchWithStream(list);
		
		return JSONUtil.createObj();
	}

}
